'''
Created on Apr 7, 2012

@author: jorge
'''

from pyramid.view import view_config
from .UsuarioViews import isLoggedView
import hashlib
import transaction
from . import ensureParams
#from ..models.Rol import Rol
from ..models import Usuario
from ..models import Tema
from ..models import DBSession
from ..models import Subscriptor

@view_config(route_name='listTema', renderer = 'json')
def listTemasView(request):
    '''
    Llamada a la vista, retorna el resultado del intento de logueo
    '''
    params = request.params
    session = request.session

    proys = DBSession.query(Tema)#.join(Proyecto.roles).join(Rol.usuarios).filter(Usuario.idUsuario==session['uid'])
    #proys = proys.filter(Tema.usuario.login.like('%' + params['uid'] + '%')) if 'uid' in params else proys
    #proys = proys.filter(Tema.nombre.like('%' +  params['nombre'].replace(' ', '%')  + '%')) if 'nombre' in params else proys
    #proys = proys.filter(Tema.descripcion.like('%' +  params['descripcion'].replace(' ', '%')  + '%')) if 'descripcion' in params else proys
    return [p.toDict() for p in proys]##

@view_config(route_name='listTemaSubscript', renderer = 'json')
def listTemasSubscriptView(request):
    '''
    Llamada a la vista, retorna el resultado del intento de logueo
    '''
    params = request.params
    session = request.session

    trues = []
    if 'idSubscriptor' in params:
        trues = DBSession.query(Tema).join(Tema.subscriptores).filter(Subscriptor.idSubscript==params['idSubscriptor'])

    proys = DBSession.query(Tema)
    return [{'idTema':p.idTema , 'usuario': p.usuario.login , 'nombre': p.nombre , 'descripcion': p.descripcion, 'suscripted' : (p in trues)} for p in proys]##

@view_config(route_name='listTemaClient', renderer = 'json')
def listTemasClientView(request):
    '''
    Llamada a la vista, retorna el resultado del intento de logueo
    '''
    params = request.params
    session = request.session

    temas = listTemasView(request)
    
    temas.insert(0,{'idTema':-1 , 'usuario': '---' , 'nombre': 'Todas' , 'descripcion': 'Todas las Noticias ordenadas por fecha'})
    
    return temas
    

@view_config(route_name='delTema', renderer='json')
def delTemaView(request):
    '''
    Elimina el proyecto seleccionado que no tenga aun fases
    '''
    params = request.params
    session = request.session
    if not ensureParams(params,['idTema']):
        return {'respuesta' : False , 'causa' : 'Parametros Insuficientes o Incorrectos.'}
    elif not isLoggedView(request)['logged']:
        return {'respuesta' : False , 'causa' : 'Debe iniciar sesion para realizar operaciones.'}
    try:
        tema = DBSession.query(Tema).filter(Tema.idTema==params['idTema'])
        if tema.join(Tema.noticias).count() > 0:
            return {'respuesta' : False , 'causa' : 'El tema no esta vacio.'}
        DBSession.delete(tema.one())
        transaction.commit()
    except Exception, e:
        transaction.abort()
        return {'respuesta' : False , 'causa' : str(e)}
        
    return {'respuesta' : True , 'mensaje' : 'Los Datos se Borraron exitosamente'}

   
@view_config(route_name='saveTema', renderer='json')
def saveTemaView(request):
    params = request.params
    session = request.session
    if not ensureParams(params,['nombre', 'descripcion', 'idUsuario']):
        return {'respuesta' : False , 'causa' : 'Parametros Insuficientes'}
    elif not isLoggedView(request)['logged']:
        return {'respuesta' : False , 'causa' : 'Debe iniciar sesion para realizar operaciones.'}
    
    toSave = {}       
    acc = 'Agregaron'
    try:
        if 'idTema' in params:
            toSave = DBSession.query(Tema).filter(Tema.idTema==params['idTema']).one()
            acc = 'Modificaron'
        else:
            toSave = Tema()
            
        toSave.nombre = params['nombre']
        toSave.descripcion = params['descripcion']
        toSave.idOwner = params['idUsuario']
        
        if 'idTema' not in params:
            DBSession.add(toSave)
            
        transaction.commit()
    except Exception, e:
        transaction.abort()
        return {'respuesta' : False , 'causa' : str(e)}
        
    return {'respuesta' : True , 'mensaje' : 'Los Datos se ' + acc + ' exitosamente'}
    